它說會給一個陣列intervals,然後intervals[i] = [starti, endi],我們要把有重疊到的區間合併成一個區間。
像範例1:
input: intervals = [[1,3],[2,6],[8,10],[15,18]]
output: [[1,6],[8,10],[15,18]]
因為區間 [1,3] 和 [2,6] 重疊,所以就把它們合併成 [1,6]。
我想要先把每個區間的開頭由小到大排好,然後把前面區間的尾數跟後面區間的開頭比較,如果前面的尾數小於後面的開頭就合併,然後更新陣列,繼續比較。
所以我先用Arrays.sort(intervals, (a, b) -> a[0] - b[0]);把他們的開頭由小到大排好,然後再用if,else進行比較。
class Solution {
public int[][] merge(int[][] intervals) {
Arrays.sort(intervals, (a, b) -> a[0] - b[0]); //排序
List<int[]> result = new ArrayList<>();
result.add(intervals[0]); //先放第一個區間,這樣後面才能跟他比較
for (int i = 1; i < intervals.length; i++) {
int[] last = result.get(result.size() - 1);
int[] current = intervals[i];
// 判斷是否合併
if (last[1] >= current[0]) {
last[1] = Math.max(last[1], current[1]); // 更新尾數
} else {
result.add(current);
}
}
return result.toArray(new int[result.size()][]);
}
}
程式碼執行成功畫面